package com.yongbao.utils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author zyh
 */
public class ObjectUtils {

    /**
     * 判断对象中除指定的字段以外是否为空
     * @param object 待判断的对象
     * @param ignore 忽略判断的字段
     * @return 是否所有字段都为空
     */
    public static boolean isFieldsEmpty(Object object,String...ignore) {
        if (object == null) {
            return true;
        }
        try {
            List<String> collect = new ArrayList<>();
            if (!org.springframework.util.ObjectUtils.isEmpty(ignore)){
                collect = Arrays.stream(ignore).collect(Collectors.toList());
            }
            for (Field field : object.getClass().getDeclaredFields()) {
                field.setAccessible(true);
                String name = field.getName();
                Object fieldValue = field.get(object);
                if (!collect.contains(name)) {
                    if (!isEmpty(fieldValue)) {
                        return false;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }

    /**
     * 判断一个字段是否为空
     * @param fieldValue 字段值
     * @return 是否为空
     */
    private static boolean isEmpty(Object fieldValue) {
        if (fieldValue == null) {
            return true;
        }
        if (fieldValue instanceof String) {
            return ((String) fieldValue).trim().isEmpty();
        }
        if (fieldValue.getClass().isArray()) {
            return ((Object[]) fieldValue).length == 0;
        }
        return false;
    }
 }
